// import { ref, reactive, computed, watch } from 'vue';

// /**
//  * 通用表格管理组合式函数
//  * @param {Function} apiFn - 获取数据的 API 函数，接收参数 { page, pageSize, sort, filters }
//  * @param {Array} columns - 表格列定义
//  * @param {Object} options - 其他配置项
//  */
// export default function useTable(apiFn, columns = [], options = {}) {
//   // 表格数据
//   const data = ref([]);
//   // 加载状态
//   const loading = ref(false);
//   // 分页
//   const pagination = reactive({
//     page: 1,
//     pageSize: 10,
//     total: 0,
//     ...options.pagination
//   });
//   // 排序
//   const sort = reactive({
//     prop: '',
//     order: '' // 'ascending' | 'descending'
//   });
//   // 过滤条件
//   const filters = ref({ ...options.filters });
//   // 选中项
//   const selection = ref([]);
//   // 列定义
//   const tableColumns = ref(columns);

//   // 获取数据
//   const fetchData = async () => {
//     loading.value = true;
//     // try {
//       const params = {
//         page: pagination.page,
//         pageSize: pagination.pageSize,
//         sort: sort.prop ? { prop: sort.prop, order: sort.order } : undefined,
//         filters: filters.value
//       };
//       const res = await apiFn(params);
//       // 兼容不同返回格式
//       data.value = res.data || res.list || [];
//       pagination.total = res.total || res.count || 0;
//     } catch (e) {
//       // 可根据需要处理错误
//       data.value = [];
//       pagination.total = 0;
//     } finally {
//       loading.value = false;
//     }
//   };

//   // 监听分页、排序、过滤变化自动请求
//   watch(
//     [() => pagination.page, () => pagination.pageSize, () => sort.prop, () => sort.order, filters],
//     fetchData
//   );

//   // 手动刷新
//   const reload = () => {
//     fetchData();
//   };

//   // 分页事件
//   const handleCurrentChange = (val) => {
//     pagination.page = val;
//   };
//   const handleSizeChange = (val) => {
//     pagination.pageSize = val;
//     pagination.page = 1;
//   };

//   // 排序事件（Element Plus）
//   const handleSortChange = ({ prop, order }) => {
//     sort.prop = prop;
//     sort.order = order;
//   };

//   // 选择事件
//   const handleSelectionChange = (val) => {
//     selection.value = val;
//   };

//   // 前端过滤（可选）
//   const filteredData = computed(() => {
//     if (!options.frontendFilter || !Object.keys(filters.value || {}).length) return data.value;
//     return data.value.filter(row => {
//       return Object.entries(filters.value).every(([key, value]) => {
//         if (!value) return true;
//         return String(row[key]).includes(String(value));
//       });
//     });
//   });

//   // 初始化
//   fetchData();

//   return {
//     data: filteredData,
//     loading,
//     pagination,
//     sort,
//     filters,
//     selection,
//     tableColumns,
//     reload,
//     handleCurrentChange,
//     handleSizeChange,
//     handleSortChange,
//     handleSelectionChange,
//     fetchData
//   };
// }
